package com.weiaibenpao.demo.chislim.api;

import com.weiaibenpao.demo.chislim.bean.ChinaRankBean;
import com.weiaibenpao.demo.chislim.bean.ChinaRecordBean;
import com.weiaibenpao.demo.chislim.bean.Comment;
import com.weiaibenpao.demo.chislim.bean.DjqMarathonBean;
import com.weiaibenpao.demo.chislim.bean.EmptyBean;
import com.weiaibenpao.demo.chislim.bean.FansAttentionListBean;
import com.weiaibenpao.demo.chislim.bean.FindSportType;
import com.weiaibenpao.demo.chislim.bean.IsLikeBean;
import com.weiaibenpao.demo.chislim.bean.LikerListBean;
import com.weiaibenpao.demo.chislim.bean.MallBean;
import com.weiaibenpao.demo.chislim.bean.MarathonBean;
import com.weiaibenpao.demo.chislim.bean.MeBean;
import com.weiaibenpao.demo.chislim.bean.MedalBean;
import com.weiaibenpao.demo.chislim.bean.MessageListBean;
import com.weiaibenpao.demo.chislim.bean.MomentDetailsBean;
import com.weiaibenpao.demo.chislim.bean.MomentListBean;
import com.weiaibenpao.demo.chislim.bean.MyZoneBean;
import com.weiaibenpao.demo.chislim.bean.SportHistoryBean;
import com.weiaibenpao.demo.chislim.bean.SportOverInfoBean;
import com.weiaibenpao.demo.chislim.bean.TravelBean;
import com.weiaibenpao.demo.chislim.bean.UserBean;
import com.weiaibenpao.demo.chislim.bean.UserDataBean;
import com.weiaibenpao.demo.chislim.bean.UserSportsInfoBean;
import com.weiaibenpao.demo.chislim.retrofit.model.BaseResponse;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Created by wlx on 2017/12/5.
 */

public interface APIService {


    /**
     * GET /index/getIndexUserSportsInfo
     * 首页的常规，中国跑的数据和选择行政区时候返回数据
     */
    @GET(Url.RUN_SPORT)
    Observable<BaseResponse<UserSportsInfoBean>> getUserSportsInfo(@Query("userId") int userId,
                                                                   @Query("sumSportType") int sumSportType, @Query("code") String code);


    /**
     * 我的界面数据
     */
    @GET(Url.ME_FRAGMENT)
    Observable<BaseResponse<MeBean>> meFragment(@Query("userId") int userId);

    /**
     * 发送短信
     */
    @POST(Url.SEED_SMS)
    Observable<BaseResponse> seedCode(@Query("userPhone") String userPhone);

    /**
     * /user/loginByMessageCode
     根据验证码登陆
     */
    @POST(Url.LOGIN)
    Observable<BaseResponse<UserDataBean> > login(@Query("userPhone") String userPhone,
                                                  @Query("securityCode") String securityCode,   //验证码
                                                  @Query("registerId") String registerId,      //极光推送id
                                                  @Query("phoneModel") String phoneModel);   //手机型号

    /**
     * 第三方登陆登录
     */
    @POST(Url.LOGIN_THREE)
    Observable<BaseResponse<UserDataBean> > loginThree(@Query("openId") String userPhone,
                                                       @Query("registerSource") String securityCode,   //注册来源
                                                       @Query("registerId") String registerId,      //极光推送id
                                                       @Query("phoneModel") String phoneModel);   //手机型号

    /**
     * POST /user/bindPhone
     * 绑定手机号
     */
    @POST(Url.BIND_PHONE)
    Observable<BaseResponse<UserDataBean> > bindingPhone(@Query("userImage") String userImage, //第三方的头像
                                                         @Query("userName") String userName,   //第三方等昵称
                                                         @Query("openId") String openId,      //第三方唯一识别
                                                         @Query("registerSource") String registerSource, //注册来源
                                                         @Query("userPhone") String userPhone,    //电话
                                                         @Query("securityCode") String securityCode,   //验证码
                                                         @Query("phoneModel") String phoneModel);   //手机型号

    /**
     * GET /index/findRankList
     * 中国跑排行榜以及个人的排名
     */
    @GET(Url.RANK_LIST)
    Observable<BaseResponse<ChinaRankBean>> getRankList(@Query("userId") int userId,
                                                        @Query("page") int page,
                                                        @Query("pageSize") int pageSize,
                                                        @Query("code") String code);

    @GET(Url.GET_LATEST_MOMENTS)
    Observable<BaseResponse<MomentListBean>> getLatestMoments(@Query("userId") int userId,
                                                              @Query("page") int page,
                                                              @Query("pageSize") int pageSize);

    @GET(Url.GET_CARED_MOMENTS)
    Observable<BaseResponse<MomentListBean>> getCaredMoments(@Query("userId") int userId,
                                                              @Query("page") int page,
                                                              @Query("pageSize") int pageSize);

    @GET(Url.GET_MOMENT_DETAILS)
    Observable<BaseResponse<MomentDetailsBean>> getMomentDetails(@Query("userId") int userId,
                                                                 @Query("humorId") int momentId,
                                                                 @Query("page") int page,
                                                                 @Query("pageSize") int pageSize
                                                                 );

    @GET(Url.GET_MESSAGE_LIST)
    Observable<BaseResponse<MessageListBean>> getMessageList(@Query("userId") int userId,
                                                                 @Query("page") int page,
                                                                 @Query("pageSize") int pageSize);

    @POST(Url.CLEAR_ALL_MESSAGE)
    Observable<BaseResponse<EmptyBean>> clearAllMessage(@Query("userId") int userId);

    @POST(Url.ADD_COMMENT)
    Observable<BaseResponse<Comment>> addComment(@Query("userId") int userId,
                                                   @Query("humorId") int momentId,
                                                   @Query("comText") String commentStr);

    @POST(Url.REPLY_COMMENT)
    Observable<BaseResponse<Comment>> replyComment(@Query("userId") int userId,
                                                  @Query("parentId") int parentId,
                                                  @Query("humorId") int momentId,
                                                  @Query("comText") String commentStr);
    @POST(Url.DELETE_COMMENT)
    Observable<BaseResponse> deleteComment(@Query("userId") int userId,
                                           @Query("commentId") int commentId);

    @GET(Url.GET_LIKER_LIST)
    Observable<BaseResponse<LikerListBean>> getLikerList(@Query("humorId") int momentId,
                                                         @Query("page") int page,
                                                         @Query("pageSize") int pageSize);


    @POST(Url.DO_LIKE_OR_UNLIKE)
    Observable<BaseResponse<IsLikeBean>> likeOrUnLike(@Query("userId") int userId,
                                                      @Query("humorId") int momentId);

    @POST(Url.REPORT)
    Observable<BaseResponse> report(@Query("userId") int userId,
                                    @Query("objectId") int objectId,
                                    @Query("type") int type,
                                    @Query("content") String content);

//    @GET(Url.BANNER_LIST)
//    Observable<BaseResponse<UserSportsInfoBean>> getUserSportsInfo(@Query("userId") int userId,
//                                                                        @Query("sumSportType") int sumSportType,
//                                                                        @Query("code") String code);

    /**
     * GET /index/findHistorySports
     * 展示用户的中国跑历史记录
     */
    @GET(Url.RECORD_LIST)
    Observable<BaseResponse<ChinaRecordBean>> getRecordList(@Query("userId") int userId,
                                                            @Query("page") int page,
                                                            @Query("pageSize") int pageSize
    );

    /**
     * POST /sports/postUserSportsInfo
     * 运动结束后的上传接口 所有跑步跑完后，数据传输 ，（参数都没有强制必传）
     */
    @POST(Url.SPORTS)
    Observable<BaseResponse<SportOverInfoBean>> postSports(
            @Query("userId") int userId,
            @Query("sportType") int sportType,//0室内运动 1室外运动 2行政室内 3 行政室外 4趣味室内 5趣味室外
            @Query("sumSportType") int sumSportType,//10是常规运动 23行政跑 45趣味跑
            @Query("activitySportsStr") String activitySportsStr,//本次跑步完成的赛事，数据格式marathonId1,totalTime1;marathonId2,totalTime2
            @Query("code") String code,
            @Query("areaAddress") String areaAddress,
            @Query("yudingDistance") double yudingDistance,
            @Query("calories") String calories,//卡路里
            @Query("identNumber") String identNumber,//趣味跑的预定距离
            @Query("heightphoto") String heightphoto,//海拔图数据，格式 12:23,45:23
            @Query("frequencyphoto") String frequencyphoto,//步频图数据，格式12:23,45:23
            @Query("stridephoto") String stridephoto,//步幅图数据，格式 12:23,45:23
            @Query("runspace") String runspace,//配速数据，格式 1:4:20,2:7:40,3:16:60
            @Query("locusphoto") String locusphoto,//除了趣味的轨迹图数据，格式 23:21:6,23:34:21 趣味的图形点 格式 120.213115,30.290981:120.213115;120.208162,30.291656:120.208162 经度和纬度之间的分割为, 断线用;分割
            @Query("locusphotoFunny") String locusphotoFunny,//趣味跑的轨迹图数据，格式 23:21:6,23:34:21
            @Query("position") int position,//趣味图形跑的点的数量跑
            @Query("totalTime") long totalTime,//总时间
            @Query("totalStep") String totalStep,//总步数
            @Query("totalDistance") double totalDistance//本次的总距离


    );

    /**
     * POST /humor/addHumor
     * 发说说
     */
    @POST(Url.ADD_HUNMOR)
    Observable<BaseResponse> postAddHumor(@Query("userId") int userId,
                                          @Query("humorContent") String humorContent,//说说内容
                                          @Query("humorImgUrl") String humorImgUrl,//图片逗号拼接地址
                                          @Query("humorVideoUrl") String humorVideoUrl,//视频地址
                                          @Query("humorpalce") String humorpalce);


    @POST(Url.DELETE_HUNMOR)
    Observable<BaseResponse> deleteMoment(@Query("userId") int userId,
                                          @Query("humorId") int humorId);
    /**
     * GET/marathon/findMarathonActivity
     进入跑步选择页面时 查询正在进行的活动
     */
    @GET(Url.FIND_MARATHON)
    Observable<BaseResponse<FindSportType>> getSportType(@Query("userId") int userId);
    /**
     * /user/evpiMessage
     完善个人信息
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updDataInfo(@Query("userId") int userId,
                                                       @Query("userImage") String userImage,
                                                             @Query("userName") String userName,
                                                             @Query("userSex") String userSex,
                                                             @Query("userHeigh") int userHeight,
                                                             @Query("userWeight") float userWeight,
                                                             @Query("userBirth") String userBirth,
                                                             @Query("userIntru") String userSign,
                                                   @Query("bgImage") String bgImage);
    /**
     * 更新用户数据  头像
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserImage(@Query("userId") int userId,
                                                       @Query("userImage") String userImage);

    /**
     * 更新用户数据  昵称
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserName(@Query("userId") int userId,
                                                      @Query("userName") String userName);

    /**
     * 更新用户数据  性别
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserSex(@Query("userId") int userId,
                                                     @Query("userSex") String userSex);

    /**
     * 更新用户数据  身高
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserHeigh(@Query("userId") int userId,
                                                       @Query("userHeigh") String userHeigh);

    /**
     * 更新用户数据  体重
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserWeight(@Query("userId") int userId,
                                                        @Query("userWeight") String userWeight);

    /**
     * 更新用户数据  生日
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserBirth(@Query("userId") int userId,
                                                       @Query("userBirth") String userBirth);

    /**
     * 更新用户数据  签名
     */
    @POST(Url.USER_INFO)
    Observable<BaseResponse<UserBean>> updateUserSign(@Query("userId") int userId,
                                                      @Query("userIntru") String userSign);
    /**
     * GET /marathon/findMarathonByIsView
     查询官方赛事活动
     */
    @GET(Url.MARATHON_URL)
    Observable<BaseResponse<MarathonBean>> getMarathon(@Query("page") int page,
                                                 @Query("pageSize") int pageSize);
    /**
     * GET /marathon/findMyMarathon
     查询我的赛事列表
     */
    @GET(Url.MY_MARATHON_URL)
    Observable<BaseResponse<MarathonBean>> getMMarathon(@Query("userId") int userId,
                                         @Query("page") int page,
                                                       @Query("pageSize") int pageSize);

    /**
     * 获取用户勋章
     */
    @GET(Url.MEDAL_LIST)
    Observable<BaseResponse<MedalBean>> getUserMedal(@Query("userId") int userId);


    /**
     * 查询官方赛事
     */
    @GET(Url.DJQ_MARATHON)
    Observable<BaseResponse<DjqMarathonBean>> getDjqMarathon(@Query("page") int page,
                                                             @Query("pageSize") int pageSize);


    /**
     * 旅游咨询
     */
    @GET(Url.DJQ_TRAVEL)
    Observable<BaseResponse<TravelBean>> getDjqTravel(@Query("page") int page,
                                                      @Query("pageSize") int pageSize);

    /**
     * 商城
     */
    @POST(Url.DJQ_MALL)
    Observable<BaseResponse<MallBean>> getDjqMall(@Query("page") int page,
                                                  @Query("pageSize") int pageSize);


    /**
     * 运动记录
     */
    @GET(Url.DSPORT_HISTORY)
    Observable<BaseResponse<SportHistoryBean>> getSportHistory(@Query("userId") int userId,
                                                               @Query("page") int page,
                                                               @Query("pageSize") int pageSize);
    /**
     *  GET/humor/getUserHumorPage
     个人详情接口
     */
    @GET(Url.HUMOR_USERHUMOR)
    Observable<BaseResponse<MyZoneBean>> getUserHumorPage(@Query("userId") int userId,//个人详情的用户id
                                                          @Query("page") int page,
                                                          @Query("pageSize") int pageSize,
                                                          @Query("nowUserId") int nowUserId);//当前登录的用户id
    /**
     * POST/fans/updateAttention
     添加关注&取消关注接口
     */
    @POST(Url.FANS_ATTENTION)
    Observable<BaseResponse> updateAttention(@Query("userId") int userId,//当前登录的用户id
                                                          @Query("beUserId") int nowUserId);//被关注的用户id
    /**
     * POST/fans/getAttentionList
     关注列表分页接口
     */
    @POST(Url.ATTENTION_LIST)
    Observable<BaseResponse<FansAttentionListBean>> getAttentionList(@Query("userId") int userId,//当前登录的用户id
                                                                     @Query("page") int page,
                                                                     @Query("pageSize") int pageSize);
    /**
     * GET/fans/getFansList
     粉丝列表分页接口
     */
    @GET(Url.FANS_LIST)
    Observable<BaseResponse<FansAttentionListBean>> getFansList(@Query("userId") int userId,//当前登录的用户id
                                              @Query("page") int page,
                                              @Query("pageSize") int pageSize);

    /**
     * /user/updatePhone
     修改手机号
     */
    @POST(Url.UPDATE_PHONE)
    Observable<BaseResponse<UserBean>> postUpDatePhone(@Query("userId") int userId,//当前登录的用户id
                                                                @Query("userPhone") String userPhone,
                                                                @Query("securityCode") String securityCode);
    /**
     * POST /user/feedback
     * 用户反馈
     */
    @POST(Url.FEEDBACK)
    Observable<BaseResponse<UserBean>> postFeedback(@Query("userId") int userId,//当前登录的用户id
                                                       @Query("fbContent") String fbContent);
}
